// 导入express模块
const express = require("express");
// 引入 express-session connect-mongo
const session = require("express-session");
const MongoStore = require("connect-mongo");

// 创建应用对象
const app = express();

// 设置session中间件
app.use(
  session({
    name: "sid", //设置cookie的name,默认值是:content.sid
    secret: "atguigu", //参与加密的字符串(又称签名)
    saveUninitialized: false, //是否为每次请求都设置一个cookie用来存储session的is
    resave: true, //设置为true表示每次请求都会重新保存session
    store: new MongoStore({
      // 将session存储到mongodb数据库中
      url: "mongodb://localhost:27017/session",
      // 保存session的数据库名
      db: "session",
      // 保存session的集合名
      collection: "sessions",
    }),
    cookie: {
      httpOnly: true, // 开启前端无法通过JS操作cookie
      maxAge: 1000 * 60 * 60 * 24 * 30, // 30天
    },
  })
);

// 登录
// 用户登录时创建session
app.get('/login',(req,res)=>{
  if(req.query.username === 'admin' && req.query.password === 'admin'){
    // 设置用户的session信息 将会被存储到数据库中
    req.session.username = 'admin';
    req.session.uid = '258aefcc';
    // 成功响应
    res.send('登录成功');
  }else{
    res.send('登录失败');
  }
})

// session的读取
// 用户访问购物车页面时获取session判断用户是否已经登录
app.get('/cart',(req,res)=>{
  // 检测session是否存在用户数据,如果存在用户数据说明用户已经登录且,session还未过期
  if(req.session.username){
    res.send(`欢迎${req.session.username}，您已登录`);
  }else{
    res.send("您还未登录")
  }
})

// session的销毁
// 用户退出登录时销毁session
app.get("/logout",(req,res)=>{
  req.session.destroy(()=>{
    res.send("您已退出登录")
  })
})

// 首页路由
app.get("/", (req, res) => {
  res.send("首页");
});

// 启动服务
app.listen(3000, () => {
  console.log("服务启动成功");
});

